package beans;

import java.util.ArrayList;
import java.util.List;

import javax.faces.component.UISelectItems;
import javax.faces.model.SelectItem;
import javax.lang.model.element.Element;

import com.icesoft.faces.component.ext.HtmlSelectManyCheckbox;


import services.EncuestaSrv;

import beans.Encuesta;

public class EncuestaBean{
	
	protected Encuesta encuesta;
	protected List<PreguntaBean> preguntas;
	protected HtmlSelectManyCheckbox check;
	
	public EncuestaBean(){
		init();
		initFormularioPreguntas();
	}

	private void init() {
		EncuestaSrv encuestaSrv = EncuestaSrv.getInstance();
		encuesta =  encuestaSrv.consultarTodasEncuestas().get(0);
	}
	
	private void initFormularioPreguntas(){
		preguntas = new ArrayList<PreguntaBean>();
		for (Pregunta preguntaTemp : encuesta.getFormatoCuestionario().getPreguntas()) {
			PreguntaBean pregunta = new PreguntaBean();
			pregunta.setPregunta(preguntaTemp);
			preguntas.add(pregunta);
		}
	}
	
	public HtmlSelectManyCheckbox crearCheckbox(){
		List valueList = new ArrayList();
 		HtmlSelectManyCheckbox selectManyCheckBox = new HtmlSelectManyCheckbox();
 		//selectManyCheckBox.setId("PROD"+i+"_SALE"+this.tabNo);
 		
 		//String bind_product = "#{testTabBean.datafield['PROD2"+this.tabNo+";"+product.getProductName()+"']}";
 		//selectManyCheckBox.setValueBinding("value", FacesContext.getCurrentInstance().getApplication().createValueBinding(bind_product));

 		/* Insert key & values into checkboxe */
 		UISelectItems items = new UISelectItems();
 		for(int j=0;j<preguntas.size();j++) {
 			PreguntaBean element = preguntas.get(j);
 			SelectItem selectCheckItems = new SelectItem("PROD1"+";");
     		valueList.add(selectCheckItems);
 		}

 		items.setValue(valueList);
 		selectManyCheckBox.getChildren().add(items);
		
		return selectManyCheckBox;
	}
	
	public Encuesta getEncuesta(){
		return encuesta;
	}
	

	public List<PreguntaBean> getPreguntas() {
		return preguntas;
	}

	public void setPreguntas(List<PreguntaBean> preguntas) {
		this.preguntas = preguntas;
	}
	
	public String guardarResultadoEncuesta(){
		encuesta.setResultadoEncuesta(generarResultadoEncuesta());
		testGuardarResultadoEncuesta();
		return "MensajeEncuestaFin";
	}
	
	public void testGuardarResultadoEncuesta(){
		
		for(ResultadoPregunta pregunta: encuesta.getResultadoEncuesta().getPreguntasRespondidas()){
			Pregunta preguntaRespondida = pregunta.getPreguntaRespondida();//Pregunta del dominio
			System.out.println("-"+preguntaRespondida.getPregunta()+":\n");
			for(Respuesta respuesta: preguntaRespondida.getRespuestas()){//Buscamos la respuesta seleccionada
				System.out.println("--"+respuesta.getRespuesta()+":\n");
			}
		}
	}
	
	private ResultadoEncuesta generarResultadoEncuesta(){
		ResultadoEncuesta resultadoEncuesta = new ResultadoEncuesta();
		for(PreguntaBean pregunta: preguntas){
			Pregunta preguntaRespondida = pregunta.getPregunta();//Pregunta del dominio
			List<Respuesta> respuestas = new ArrayList<Respuesta>();//Lista para las repuesta(s) seleccionada(s)
			
			if(pregunta.getRespuestaSeleccionada() == null){//Tiene mas de una respuesta seleccionada
				String [] respuestasSeleccionadas= pregunta.getRespuestasSeleccionadasCheckbox();
				for (int index = 0; index < respuestasSeleccionadas.length; index++) {
					for(Respuesta respuesta: preguntaRespondida.getRespuestas()){//Buscamos las respuestas seleccionadas
						if(respuesta.getId() == Integer.parseInt(respuestasSeleccionadas[index])){
							respuestas.add(respuesta);
						}
						
					}
				}
			}else{//unica respuesta seleccionada
				for(Respuesta respuesta: preguntaRespondida.getRespuestas()){//Buscamos la respuesta seleccionada
					if(respuesta.getId() == Integer.parseInt(pregunta.getRespuestaSeleccionada())){
						respuestas.add(respuesta);
						break;
					}
				}
			}
			preguntaRespondida.setRespuestas(respuestas);
			ResultadoPregunta resultadoPregunta = new ResultadoPregunta();
			resultadoPregunta.setPreguntaRespondida(preguntaRespondida);
			
			resultadoEncuesta.agregarPreguntaRespondida(resultadoPregunta);
		}
		
		return resultadoEncuesta;
	}
}
